// pages/user/user.js
const http = require('../../utils/http.js')
const config = require('../../utils/config.js')

Page({
  /**
   * 页面的初始数据
   */
  data: {
    isAuthInfo: false,
    userInfo: null,
    designs: [], // 我的设计列表
    designsLoading: true, // 加载状态
    currentPage: 1, // 当前页码
    pageSize: 3, // 每页数量
    hasMore: true // 是否有更多数据
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
    this.loadUserInfo()
    this.loadDesigns()
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady: function () {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow: function () {
    this.loadUserInfo()
    this.loadDesigns()
  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide: function () {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload: function () {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh: function () {
    this.setData({
      currentPage: 1,
      hasMore: true
    })
    this.loadDesigns().then(() => {
      wx.stopPullDownRefresh()
    })
  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom: function () {
    if (this.data.hasMore) {
      this.loadMoreDesigns()
    }
  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage: function () {

  },

  /**
   * 加载用户信息
   */
  loadUserInfo: function () {
    const that = this
    const token = wx.getStorageSync('token')

    if (token) {
      try {
        const params = {
          url: '/p/user/userInfo',
          method: 'GET',
          header: {
            'Content-Type': 'application/json',
            'Authorization': token
          },
          callBack: res => {
            console.log('获取用户信息成功的数据:', res)
            if (res) {
              // 更新本地存储
              wx.setStorageSync('userInfo', res)
              // 更新页面数据
              that.setData({
                isAuthInfo: true,
                userInfo: res
              })
              console.log('更新用户信息:', this.data.userInfo)
            } else {
              // 接口失败但有token，使用本地存储的用户信息
              const localUserInfo = wx.getStorageSync('userInfo')
              that.setData({
                isAuthInfo: true,
                userInfo: localUserInfo || null
              })
            }
          },
          errCallBack: err => {
            console.error('获取用户信息失败:', err)
            // 网络错误，使用本地存储的用户信息
            const localUserInfo = wx.getStorageSync('userInfo')
            that.setData({
              isAuthInfo: true,
              userInfo: localUserInfo || null
            })
          }
        }
        http.request(params)
      } catch (error) {
        console.error('获取用户信息异常:', error)
        // 异常情况，使用本地存储的用户信息
        const localUserInfo = wx.getStorageSync('userInfo')
        that.setData({
          isAuthInfo: true,
          userInfo: localUserInfo || null
        })
      }
    } else {
      // 没有token，清除本地用户信息
      wx.removeStorageSync('userInfo')
      this.setData({
        isAuthInfo: false,
        userInfo: null
      })
    }
  },

  /**
   * 加载我的设计列表
   */
  loadDesigns: function () {
    const that = this
    this.setData({ designsLoading: true })

    try {
      const params = {
        url: '/p/faceDraft/page',
        method: 'GET',
        data: {
          page: 1,
          limit: 3,
          status: 2
        },
        header: {
          'Content-Type': 'application/json',
          'Authorization': wx.getStorageSync('token')
        },
        callBack: res => {
          console.log(res, '获取设计列表成功')
          if (res) {
            const designs = res.records ? res.records.slice(0, 3) : []
            console.log(designs)
            // 转换接口数据格式，添加资源URL前缀
            that.setData({
              designs: designs,
              designsLoading: false,
              hasMore: designs.length >= that.data.pageSize
            })
          } else {
            that.setData({
              designs: [],
              designsLoading: false,
              hasMore: false
            })
            wx.showToast({
              title: '获取设计列表失败',
              icon: 'none'
            })
          }
        },
        errCallBack: err => {
          console.error('加载设计列表失败:', err)
          that.setData({
            designs: [],
            designsLoading: false,
            hasMore: false
          })
          wx.showToast({
            title: '网络错误，请重试',
            icon: 'none'
          })
        }
      }
      http.request(params)
    } catch (error) {
      console.error('加载设计列表异常:', error)
      that.setData({
        designs: [],
        designsLoading: false,
        hasMore: false
      })
      wx.showToast({
        title: '加载异常，请重试',
        icon: 'none'
      })
    }
  },

  /**
   * 加载更多设计
   */
  loadMoreDesigns: function () {
    const that = this
    if (!this.data.hasMore || this.data.designsLoading) return

    const nextPage = this.data.currentPage + 1

    try {
      const params = {
        url: '/p/faceDesign/page',
        method: 'GET',
        data: {
          userId: 'user123',
          page: nextPage,
          limit: that.data.pageSize,
          status: 1
        },
        header: {
          'Content-Type': 'application/json',
          'Authorization': wx.getStorageSync('token')
        },
        callBack: res => {
          console.log(res)
          if (res && res.records) {
            const newDesigns = res.records
            // 转换接口数据格式，添加资源URL前缀
            newDesigns.forEach((item, index) => {
              if (item.imageUrl) {
                item.fullImageUrl = config.domain + item.imageUrl
              }
            })
            that.setData({
              designs: [...that.data.designs, ...newDesigns],
              currentPage: nextPage,
              hasMore: newDesigns.length >= that.data.pageSize
            })
          } else {
            that.setData({ hasMore: false })
            wx.showToast({
              title: '加载更多失败',
              icon: 'none'
            })
          }
        },
        errCallBack: err => {
          console.error('加载更多设计失败:', err)
          wx.showToast({
            title: '网络错误，请重试',
            icon: 'none'
          })
        }
      }
      http.request(params)
    } catch (error) {
      console.error('加载更多设计异常:', error)
      wx.showToast({
        title: '加载异常，请重试',
        icon: 'none'
      })
    }
  },

  /**
   * 查看设计详情
   */
  viewDesign: function (e) {
    const designId = e.currentTarget.dataset.id
    if (!designId) {
      wx.showToast({
        title: '设计ID无效',
        icon: 'none'
      })
      return
    }

    wx.navigateTo({
      url: `/pages/design/detail?id=${designId}`
    })
  },

  /**
   * 查看所有设计
   */
  viewAllDesigns: function () {
    wx.navigateTo({
      url: '/pages/design/list'
    })
  },

  /**
   * 跳转到订单列表页面
   */
  toOrderListPage: function () {
    wx.navigateTo({
      url: '/pages/order/list'
    })
  },

  /**
   * 跳转到自定义页面
   */
  toCustomize: function () {
    wx.switchTab({
      url: '/pages/index/index'
    })
  },

  /**
   * 跳转到登录页面
   */
  toLogin: function () {
    wx.navigateTo({
      url: '/pages/login/login'
    })
  },

  /**
   * 跳转到反馈页面
   */
  toFeedback: function () {
    wx.navigateTo({
      url: '/pages/feedback/index'
    })
  },

  /**
   * 联系客服
   */
  contactCustomerService: function () {
    wx.makePhoneCall({
      phoneNumber: '400-888-8888'
    })
  },

  /**
   * 关于我们
   */
  aboutUs: function () {
    wx.navigateTo({
      url: '/pages/about/index'
    })
  },

  /**
   * 退出登录
   */
  logout: function () {
    wx.showModal({
      title: '提示',
      content: '确定要退出登录吗？',
      success: (res) => {
        if (res.confirm) {
          wx.removeStorageSync('userInfo')
          wx.removeStorageSync('token')
          this.setData({
            isAuthInfo: false,
            userInfo: null
          })
          wx.showToast({
            title: '已退出登录',
            icon: 'success'
          })
        }
      }
    })
  },

  /**
   * 上传图片到服务器
   */
  uploadImageToServer: function(tempFilePath) {
    const that = this
    
    return new Promise((resolve, reject) => {
      wx.uploadFile({
        url: `${config.adminDomain}/admin/file/upload/element`,
        filePath: tempFilePath,
        name: 'file',
        header: {
          'Authorization': wx.getStorageSync('token') || '5045741a-2081-4eda-b092-b976c02c4d99'
        },
        success: (uploadRes) => {
          try {
            const data = JSON.parse(uploadRes.data)
            console.log('✅ 上传头像成功:', data)
            
            if (data && data.code === '00000' && data.data) {
              resolve(config.resourcesUrl + data.data)
            } else {
              console.error('❌ 上传头像返回数据格式错误:', data)
              reject(new Error('上传头像返回数据格式错误'))
            }
          } catch (e) {
            console.error('❌ 解析上传头像返回数据失败:', e)
            reject(e)
          }
        },
        fail: (err) => {
          console.error('❌ 上传头像失败:', err)
          reject(err)
        }
      })
    })
  },

  /**
   * 微信选择头像事件处理
   */
  onChooseAvatar: function(e) {
    const that = this
    const avatarUrl = e.detail.avatarUrl
    
    // 检查用户是否已登录
    if (!this.data.isAuthInfo) {
      wx.showToast({
        title: '请先登录',
        icon: 'none'
      })
      return
    }
    
    try {
      wx.showLoading({
        title: '更新中...'
      })

      // 先上传头像到服务器，获取文件地址
      that.uploadImageToServer(avatarUrl)
        .then(serverUrl => {
          console.log('头像上传成功，服务器地址:', serverUrl)
          
          // 使用服务器返回的文件地址更新用户信息
          const params = {
            url: '/p/user/setUserInfo',
            method: 'PUT',
            data: {
              pic: serverUrl
            },
            header: {
              'Content-Type': 'application/json',
              'Authorization': wx.getStorageSync('token')
            },
            callBack: res => {
              console.log('✅ 头像更新成功，返回数据:', res)
              wx.hideLoading()
              
              // 更新本地用户信息
              const userInfo = that.data.userInfo
              userInfo.pic = serverUrl
              that.setData({
                userInfo: userInfo
              })
              wx.setStorageSync('userInfo', userInfo)
              
              wx.showToast({
                title: '头像更新成功',
                icon: 'success'
              })
            },
            errCallBack: err => {
              wx.hideLoading()
              console.error('❌ 头像更新失败:', err)
              
              // 更详细的错误处理
              if (err && err.msg) {
                wx.showToast({
                  title: err.msg,
                  icon: 'none'
                })
              } else {
                wx.showToast({
                  title: '头像更新失败，请重试',
                  icon: 'none'
                })
              }
            }
          }
          http.request(params)
        })
        .catch(err => {
          wx.hideLoading()
          console.error('❌ 头像上传失败:', err)
          wx.showToast({
            title: '头像上传失败，请重试',
            icon: 'none'
          })
        })
    } catch (error) {
      wx.hideLoading()
      console.error('❌ 更新头像异常:', error)
      wx.showToast({
        title: '更新异常，请重试',
        icon: 'none'
      })
    }
  },

  // 上传图片到服务器（从customize.js复制）
  uploadImageToServer: function(tempFilePath) {
    const config = require('../../utils/config.js')
    
    return new Promise((resolve, reject) => {
      wx.uploadFile({
        url: `${config.adminDomain}/admin/file/upload/element`,
        filePath: tempFilePath,
        name: 'file',
        header: {
          'Authorization': wx.getStorageSync('token') || '5045741a-2081-4eda-b092-b976c02c4d99'
        },
        success: (uploadRes) => {
          try {
            const data = JSON.parse(uploadRes.data)
            console.log('上传头像成功:', data)
            
            if (data && data.code === '00000' && data.data) {
              resolve(config.resourcesUrl + data.data)
            } else {
              console.error('上传头像返回数据格式错误:', data)
              reject(new Error('上传头像返回数据格式错误'))
            }
          } catch (e) {
            console.error('解析上传头像返回数据失败:', e)
            reject(e)
          }
        },
        fail: (err) => {
          console.error('上传头像失败:', err)
          reject(err)
        }
      })
    })
  },

  /**
   * 选择微信头像（保留原有功能，用于从相册或相机选择）
   */
  chooseAvatar: function () {
    const that = this

    // 检查用户是否已登录
    if (!this.data.isAuthInfo) {
      wx.showToast({
        title: '请先登录',
        icon: 'none'
      })
      return
    }

    wx.chooseImage({
      count: 1,
      sizeType: ['compressed'],
      sourceType: ['album', 'camera'],
      success: function (res) {
        const tempFilePaths = res.tempFilePaths
        const tempFilePath = tempFilePaths[0]
        
        try {
          wx.showLoading({
            title: '上传中...'
          })

          // 先上传图片到服务器
          that.uploadImageToServer(tempFilePath)
            .then(imageUrl => {
              console.log('✅ 上传头像成功，图片URL:', imageUrl)

              // 上传成功后，使用pic字段更新到服务端
              const params = {
                url: '/p/user/setUserInfo',
                method: 'PUT',
                data: {
                  pic: imageUrl
                },
                header: {
                  'Content-Type': 'application/json',
                  'Authorization': wx.getStorageSync('token')
                },
                callBack: res => {
                  console.log('✅ 头像更新成功，返回数据:', res)
                  wx.hideLoading()
                  
                  // 更新本地用户信息
                  const userInfo = that.data.userInfo
                  userInfo.pic = imageUrl
                  that.setData({
                    userInfo: userInfo
                  })
                  wx.setStorageSync('userInfo', userInfo)
                  
                  wx.showToast({
                    title: '头像更新成功',
                    icon: 'success'
                  })
                },
                errCallBack: err => {
                  wx.hideLoading()
                  console.error('❌ 头像更新失败:', err)
                  
                  // 更详细的错误处理
                  if (err && err.msg) {
                    wx.showToast({
                      title: err.msg,
                      icon: 'none'
                    })
                  } else {
                    wx.showToast({
                      title: '头像更新失败，请重试',
                      icon: 'none'
                    })
                  }
                }
              }
              http.request(params)
            })
            .catch(err => {
              wx.hideLoading()
              console.error('❌ 上传头像失败:', err)
              wx.showToast({
                title: '上传失败，请重试',
                icon: 'none'
              })
            })
        } catch (error) {
          wx.hideLoading()
          console.error('❌ 上传头像异常:', error)
          wx.showToast({
            title: '上传异常，请重试',
            icon: 'none'
          })
        }
      },
      fail: function (err) {
        console.error('❌ 选择图片失败:', err)
      }
    })
  },

  /**
   * 昵称输入事件 - 实时更新输入框显示
   */
  onNicknameInput: function(e) {
    const nickname = e.detail.value
    const userInfo = this.data.userInfo || {}
    console.log('📝 输入框输入事件触发:', e.detail.value);
    
    userInfo.nickName = nickname
    this.setData({
      userInfo: userInfo
    })
    this.updateNicknameToServer(nickname)

  },

  /**
   * 更新昵称到服务端
   */
  updateNicknameToServer: function(nickname) {
    const that = this
    
    try {
      wx.showLoading({
        title: '更新中...'
      })

      // 调用更新用户昵称的接口
      const params = {
        url: '/p/user/setUserInfo',
        method: 'PUT',
        data: {
          nickName: nickname,
        },
        header: {
          'Content-Type': 'application/json',
          'Authorization': wx.getStorageSync('token')
        },
        callBack: res => {
          console.log('✅ 昵称更新成功，返回数据:', res)
          wx.hideLoading()
          wx.showToast({
            title: '昵称更新成功',
            icon: 'success'
          })
        },
        errCallBack: err => {
          wx.hideLoading()
          console.error('❌ 昵称更新失败:', err)
          
          // 更详细的错误处理
          if (err && err.msg) {
            wx.showToast({
              title: err.msg,
              icon: 'none'
            })
          } else {
            wx.showToast({
              title: '更新失败，请重试',
              icon: 'none'
            })
          }
        }
      }
      http.request(params)
    } catch (error) {
      wx.hideLoading()
      console.error('❌ 更新昵称异常:', error)
      wx.showToast({
        title: '更新异常，请重试',
        icon: 'none'
      })
    }
  },

  /**
   * 跳转到我的草稿页面
   */
  toDraftPage: function() {
    wx.navigateTo({
      url: '/pages/draft/draft'
    })
  },

  /**
   * 跳转到登录页面
   */
  toLogin: function() {
    wx.navigateTo({
      url: '/pages/login/login'
    })
  }
})